/*
 * Filename: /home/long/work/sample/c/2021-f0803/s_sqrt.c
 * Path: /home/long/work/sample/c/2021-f0803
 * Created Date: Saturday, April 17th 2021, 2:00:14 pm
 * Author: long
 * 
 * 1. 输入一个正整数，输出这个数的平方根。结果按照四舍五入方式取整，不能使用浮点数。
 * 
 * Copyright (c) 2021 Your Company
 */
#include <stdio.h>
#include <math.h>

int s_sqrt(int n) 
{
    /* 分析：
    (a-0.5)^2 <= (a-x)^2 = n, 其中 0 < x < 1
    如果不等式取等号： 则 x=0.5, 结果为a，
    如果不等式取小于号： 则 x<0.5, 结果为a,
    否则结果为: a-1

    将不等式两边同时放大100倍则： 
    (10*a-5)^2 <= (10*a-10x)^2 = 100n, 令X=10x, 则X <= 5, 则结果为a,否则为a-1.
     */
    int a;
    for(a=1; a<n; a++)
        if (a*a > n) break;
    if (((10*a -5)*(10*a-5)) <= 100*n) return a;
    return a-1;
}

void main()
{
    for(int i=0; i<10; i++){
        printf("sqrt(%d)=%d, %f\n", i, s_sqrt(i), sqrt(i));
    }
}